package com.example.fashionshoes.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.fashionshoes.exception.PasswordIncorrectException;
import com.example.fashionshoes.exception.PasswordNotMatchException;
import com.example.fashionshoes.exception.SamePasswordException;
import com.example.fashionshoes.exception.UsernameExistException;
import com.example.fashionshoes.pojo.dto.UserDTO;
import com.example.fashionshoes.pojo.dto.UserInfoDTO;
import com.example.fashionshoes.pojo.dto.UserPasswordDTO;
import com.example.fashionshoes.pojo.po.User;
import com.example.fashionshoes.pojo.vo.UserLoginVo;
import com.example.fashionshoes.pojo.vo.UserVo;

import java.util.List;

public interface UserService extends IService<User> {
    /**
     * 用户登录
     * @param user 用户账户密码
     * @return 用户信息（不包含密码）
     */
    UserLoginVo toLogin(User user) throws Exception;

    /**
     * 用户注册
     * @param user 用户填写的数据
     * @return 用户信息
     */
    UserLoginVo toRegister(User user) throws UsernameExistException, PasswordNotMatchException;

    /**
     * 修改密码
     * @param userPasswordDTO 要修改的密码
     */
    void changePassword(UserPasswordDTO userPasswordDTO) throws PasswordNotMatchException, PasswordIncorrectException, SamePasswordException;

    /**
     * 修改用户信息
     * @param userDTO 用户信息
     * @return 修改后的用户信息
     */
    UserVo modifyUserInfo(UserDTO userDTO);

    /**
     * 禁用启用用户账户
     * @param userInfoDTO 用户id,status
     * @return 操作的结果
     */
    boolean modifyUserStatus(UserInfoDTO userInfoDTO);

    /**
     * 获取除管理员以外的用户信息
     * @return 除管理员以外的用户信息
     */
    List<UserVo> getUser();
}
